// electron主进程文件
//手动创建文件用于编写electron
import { app, BrowserWindow } from 'electron'

// const isDev = import.meta.env  // 错误写法，electron无法读取vite服务信息
const isDev = process.env.NODE_ENV === 'development'

// 等待electron应用就绪后创建BrowserWindow窗口
app.whenReady().then(async () => {
  const win = await new BrowserWindow({
    width: 800,
    height: 600,

    // 配置窗口的webPreferences属性，用于控制渲染进程行为
    webPreferences: {
      nodeIntegration: true, // 启用node.js集成（可以在渲染进程中使用Node.js API，为了安全考虑默认是false）
      contextIsolation: false, // 禁用上下文隔离 (关闭渲染进程的沙箱，为了安全，怕第三方的npm包注入木马。如果使用的npm包可信，关闭即可)
      webSecurity: false, // 禁用web安全策略 （关闭跨域检测
    },
  })

  // 根据命令行参数加载URL或本地文件
  // 该代码检查命令行参数，如果有参数则加载URL，否则加载本地文件index.html
  // 开发模式下，可以将URL指向本地的开发服务器，以便实现热更新和实时调试。
  // 在生产模式下，需要将URL指向本地的index.html文件，以便在本地运行Electron应用程序。
  console.info(process, 'process') // argv[1]--dist/background.js argv[2]--IP 对应 ['dist/background.js', IP]
  if (isDev) {
    // 读到是开发环境，否则是打包（生产）环境
    win.loadURL(process.argv[2]) // 为什么是加载URL呢？因为在开发环境下要热更新（相当于保存文件-刷新一下网页动作，使用fs.watchFile-监听文件变化）
    win.webContents.openDevTools() // 打开调试工具-通过注释和开启验证一下是否热更新-热更新现象：壳子（应用窗口）关闭了然后重新打开。改vue文件则直接热更新
  } else {
    win.loadFile('./index.html')
  }
})

// 在这段代码中，app.whenReady()函数用于在Electron应用程序准备就绪后执行回调函数。
// 该函数返回一个Promise对象，可以使用async/await语法来等待应用程序就绪后执行其他操作。
// 在这个例子中，我们使用await关键字来等待BrowserWindow对象的创建完成。

// 更简洁的写法
// const createWindow = () => {
//   // ...创建一个窗口
// }
// app.on('ready', createWindow)
